#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#define MAX 512
/*
获取当前的目录，或者根据传入的参数获取相应的目录.

执行:xx.exe或者xx.exe /  (这里/是传入的参数)
*/
int main(int argc,char *argv[])
{
	char *buf = NULL;
	//分配内存，用来存放工作目录的文件名
	buf = malloc(MAX);
	if( NULL == buf )
	{
		perror("malloc");
		return -1;
	}
	memset(buf,'\0',MAX);
	//获取当前工作目录，放在buf里面，大小不超过MAX
	if(NULL == getcwd(buf,MAX) )
	{
		perror("getcwd");
		return -1;
	}
	printf("cur dir is %s\n",buf);

	//通过参数，来改变当前工作目录
	if(-1 == chdir(argv[1]))
	{
		perror("chdri");
	}
	memset(buf,'\0',MAX);
	//获取当前工作目录，放在buf里面，大小不超过MAX
	if(NULL == getcwd(buf,MAX) )
	{
		perror("getcwd");
		return -1;
	}
	printf("cur dir is %s\n",buf);
	free(buf);//释放申请的内存
	return 0;
}


/*
malloc 向系统申请分配指定size个字节的内存空间。
返回类型是 void* 类型。void* 表示未确定类型的指针。
C,C++规定，void* 类型可以强制转换为任何其它类型的指针.

*/


/*
getcwd

#include <unistd.h>
char *getcwd(char *buf, size_t size);

作用:把当前目录的绝对地址保存到 buf中,
buf的大小为 size。如果 size太小无法保存该地址,
返回NULL并设置errno为ERANGE。

*/

/*
void *memset(void *s, int ch, size_t n);
函数解释：将s中前n个字节 （typedef unsigned int size_t ）用 ch 替换并返回 s 。
memset：作用是在一段内存块中填充某个给定的值，它是对较大的结构体或数组进行清零操作的一种最快方法;


*/

/*
int _chdir(const char *path);
#include<stdio.h>
#include<unistd.h>//这里与windows的不一样

功 能：更改当前工作目录。
参 数：Path 必选。Path 可能包含驱动器。如果未指定驱动器，则当前驱动器上的默认目录或文件夹。
返回值：成功返回0 ，失败返回-1

*/


/*
函数名: free   头文件：malloc.h或stdlib.h
功 能: 与malloc()函数配对使用，释放malloc函数申请的动态内存。
（另：对于free(p)这句语句，如果p 是NULL 指针，那么free 对p 无论操作多少次都不会出问题。
如果p 不是NULL 指针，那么free 对p连续操作两次就会导致程序运行错误。）
用 法: void free(void *ptr);

*/
